# 特性：经典类是一种没有继承的类，对象类型都是type类型，如果经典类被作为父类
# 子类调用父类的构造函数时会出错
# class A:
#     pass
'''
mro的方法为深度优先算法（DFS）
1、把根节点压入栈中
2、每次从栈中弹出一个元素，搜索所有它下一级的元素，把这些元素压入栈中，并把这个
元素记为它下一级元素的前驱
3、找到所有的元素时结束程序
4、如果遍历整个树还没有找到，程序结束

'''

# 查看经典类的MRO顺序
import inspect
class D:
    pass
class C(D):
    pass
class B(D):
    pass
class A(B, C):
    pass
print(inspect.getmro(A))


'''
第一种：正常继承模式，两个互不相关的类的多继承，这种请求DFS顺序正常的，没有
    引起任何问题
    
第二种：菱形继承模式，存在公共父类D类的多继承，这种情况DFS必须经过公共父类D类
    如果公共父类D中有一些初始化属性和方法，但是子类c又重写了这些属性和方法，那么
    按照DFS的顺序必定是先找到D的属性和方法，C的属性或方法将永远用不到了，导致C只能
    继承无法重写
'''
